// 导入 http 模块
import http from 'wechat-http'

// 设置基地址
http.baseURL = 'https://live-api.itheima.net'

// 配置请求拦截器
http.intercept.request = function (options) {
  // 扩展接口配置
  const defaultHeader = {}
  // 身份认证
  defaultHeader.Authorization = 'Bearer ' + getApp().token
  // 与默认头信息合并
  options.header = Object.assign({},defaultHeader,options.header)
  // 处理后的请求参数
  return options
}

// 配置响应拦截器
http.intercept.response = async function ({data, config}) {
  // 1.如果状态码为401，则表明token失效
  if(data.code === 401) {
    // 获取应用实例读取refreshToken
    const app = getApp()
    // console.log(app.refreshToken);

    // 3. token和refreshToken都失效（状态码401）且请求接口为/refreshToken，重新登录
    if (config.url.includes('/refreshToken')) {
     // 获取当前页面地址，保证登录成功后跳转回来
     const pageStack = getCurrentPages()
     const currentPage = pageStack.pop()
     const redirectURL = currentPage.route

     // 判断 redirectURL 是不是taBar页面
     const isTabBarPage = wx.utils.isTabBarPage(redirectURL)
      // 如果是则使用wx.switchTab跳转页面
      const routeType = isTabBarPage ? 'switchTab' : 'redirectTo'  

     // 跳转到当前页面
     return wx.redirectTo({
       url: `/pages/login/index?redirectURL=/${redirectURL}&routeType=${routeType}`,
     })  
    }
   
    // 1. 调用接口获取新的token
    const {code, data} = await http({
      url: '/refreshToken',
      method: 'POST',
      header: {
        Authorization: 'Bearer ' + app.refreshToken
      }
    })
    // 检测接口是否调用成功
    if(code !== 10000) return wx.utils.toast('更新token失败')
    // 重新存储新的token
    app.setToken('token', data.token)
    app.setToken('refreshToken', data.refreshToken)
    
    // 2. 获取到原来的接口请求的参数
    config = Object.assign(config, {
      // 使用更新后的token 重新请求
      header: {
        Authorization: 'Bearer ' + data.token
      }
    })
    // 继续原来的请求
    return http(config)

 
  }
  
  // 只保留data数据，其他过滤掉
  return data
}

// 以模块方式导出
export default http
// 挂载到全局对象中
wx.http = http